home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1992, Brian Berliner and Jeff Polk
- * Copyright (c) 1989-1992, Brian Berliner
- *
- * You may distribute under the terms of the GNU General Public License as
- * specified in the README file that comes with the CVS 1.4 kit.
- *
- * Create Administration.
- *
- * Creates a CVS administration directory based on the argument repository; the
- * "Entries" file is prefilled from the "initrecord" argument.
- */
-
- #include "cvs.h"
-
- /* update_dir includes dir as its last component. */
-
- void
- Create_Admin (dir, update_dir, repository, tag, date)
- char *dir;
- char *update_dir;
- char *repository;
- char *tag;
- char *date;
- {
- FILE *fout;
- char *cp;
- char tmp[PATH_MAX];
-
- #ifdef SERVER_SUPPORT
- if (trace)
- {
- char wd[PATH_MAX];
- getwd (wd);
- fprintf (stderr, "%c-> Create_Admin (%s, %s, %s, %s, %s) in %s\n",
- (server_active) ? 'S' : ' ',
- dir, update_dir, repository, tag ? tag : "",
- date ? date : "", wd);
- }
- #endif
-
- if (noexec)
- return;
-
- if (dir != NULL)
- (void) sprintf (tmp, "%s/%s", dir, CVSADM);
- else
- (void) strcpy (tmp, CVSADM);
- if (isfile (tmp))
- error (1, 0, "there is a version in %s already", update_dir);
-
- make_directory (tmp);
-
- /* record the current cvs root for later use */
-
- Create_Root (dir, CVSroot);
- if (dir != NULL)
- (void) sprintf (tmp, "%s/%s", dir, CVSADM_REP);
- else
- (void) strcpy (tmp, CVSADM_REP);
- fout = fopen (tmp, "w+");
- if (fout == NULL)
- {
- if (update_dir[0] == '\0')
- error (1, errno, "cannot open %s", tmp);
- else
- error (1, errno, "cannot open %s/%s", update_dir, CVSADM_REP);
- }
- cp = repository;
- strip_path (cp);
-
- #ifdef RELATIVE_REPOS
- /*
- * If the Repository file is to hold a relative path, try to strip off
- * the leading CVSroot argument.
- */
- if (CVSroot != NULL)
- {
- char path[PATH_MAX];
-
- (void) sprintf (path, "%s/", CVSroot);
- if (strncmp (repository, path, strlen (path)) == 0)
- cp = repository + strlen (path);
- }
- #endif
-
- if (fprintf (fout, "%s\n", cp) < 0)
- {
- if (update_dir[0] == '\0')
- error (1, errno, "write to %s failed", tmp);
- else
- error (1, errno, "write to %s/%s failed", update_dir, CVSADM_REP);
- }
- if (fclose (fout) == EOF)
- {
- if (update_dir[0] == '\0')
- error (1, errno, "cannot close %s", tmp);
- else
- error (1, errno, "cannot close %s/%s", update_dir, CVSADM_REP);
- }
-
- /* now, do the Entries file */
- if (dir != NULL)
- (void) sprintf (tmp, "%s/%s", dir, CVSADM_ENT);
- else
- (void) strcpy (tmp, CVSADM_ENT);
- fout = fopen (tmp, "w+");
- if (fout == NULL)
- {
- if (update_dir[0] == '\0')
- error (1, errno, "cannot open %s", tmp);
- else
- error (1, errno, "cannot open %s/%s", update_dir, CVSADM_ENT);
- }
- if (fclose (fout) == EOF)
- {
- if (update_dir[0] == '\0')
- error (1, errno, "cannot close %s", tmp);
- else
- error (1, errno, "cannot close %s/%s", update_dir, CVSADM_ENT);
- }
-
- /* Create a new CVS/Tag file */
- WriteTag (dir, tag, date);
-
- #ifdef SERVER_SUPPORT
- if (server_active)
- {
- server_set_sticky (update_dir, repository, tag, date);
- server_template (update_dir, repository);
- }
-
- if (trace)
- {
- fprintf (stderr, "%c<- Create_Admin\n",
- (server_active) ? 'S' : ' ');
- }
- #endif
-
- }
-